#!/usr/bin/env python
"""
数据库初始化脚本

用于创建MySQL数据库和执行初始化操作。
运行此脚本前请确保MySQL服务已启动，并且有相应的权限。

使用方法:
    python init_db.py
"""

import os
import sys
import django
import pymysql
from decouple import config

# 添加项目路径
sys.path.append(os.path.dirname(os.path.abspath(__file__)))

# 设置Django环境
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'logwisdomhub.settings')
django.setup()

from django.core.management import execute_from_command_line
from django.contrib.auth import get_user_model
from accounts.models import UserProfile


def create_database():
    """
    创建MySQL数据库
    
    如果数据库不存在，则创建新数据库。
    """
    print("正在创建数据库...")
    
    try:
        # 数据库配置
        db_config = {
            'host': config('DB_HOST', default='localhost'),
            'port': int(config('DB_PORT', default='3306')),
            'user': config('DB_USER', default='root'),
            'password': config('DB_PASSWORD', default=''),
            'charset': 'utf8mb4'
        }
        
        db_name = config('DB_NAME', default='logwisdomhub')
        
        # 连接MySQL服务器
        connection = pymysql.connect(**db_config)
        
        with connection.cursor() as cursor:
            # 创建数据库（如果不存在）
            cursor.execute(f"CREATE DATABASE IF NOT EXISTS `{db_name}` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci")
            print(f"数据库 '{db_name}' 创建成功或已存在")
        
        connection.close()
        return True
        
    except Exception as e:
        print(f"创建数据库失败: {str(e)}")
        print("请检查MySQL服务是否启动，以及数据库配置是否正确")
        return False


def run_migrations():
    """
    执行数据库迁移
    
    创建所有必要的数据库表。
    """
    print("正在执行数据库迁移...")
    
    try:
        # 创建迁移文件
        print("创建迁移文件...")
        execute_from_command_line(['manage.py', 'makemigrations'])
        
        # 执行迁移
        print("应用迁移...")
        execute_from_command_line(['manage.py', 'migrate'])
        
        print("数据库迁移完成")
        return True
        
    except Exception as e:
        print(f"数据库迁移失败: {str(e)}")
        return False


def create_superuser():
    """
    创建超级管理员用户
    
    如果不存在超级用户，则创建一个默认的管理员账户。
    """
    print("正在创建超级管理员...")
    
    try:
        User = get_user_model()
        
        # 检查是否已存在超级用户
        if User.objects.filter(is_superuser=True).exists():
            print("超级管理员已存在，跳过创建")
            return True
        
        # 创建超级用户
        admin_user = User.objects.create_superuser(
            username='admin',
            email='admin@logwisdomhub.com',
            password='admin123456',
            phone='13800138000'
        )
        
        # 创建用户资料
        UserProfile.objects.create(user=admin_user)
        
        print("超级管理员创建成功:")
        print("  用户名: admin")
        print("  邮箱: admin@logwisdomhub.com")
        print("  密码: admin123456")
        print("  手机: 13800138000")
        print("请及时修改默认密码！")
        
        return True
        
    except Exception as e:
        print(f"创建超级管理员失败: {str(e)}")
        return False


def create_sample_data():
    """
    创建示例数据
    
    创建一些测试用户和项目数据。
    """
    print("正在创建示例数据...")
    
    try:
        User = get_user_model()
        
        # 创建测试用户
        if not User.objects.filter(username='testuser').exists():
            test_user = User.objects.create_user(
                username='testuser',
                email='test@example.com',
                password='testpass123',
                phone='13900139000',
                first_name='测试',
                last_name='用户',
                nickname='测试用户'
            )
            
            # 创建用户资料
            UserProfile.objects.create(user=test_user)
            
            print("测试用户创建成功:")
            print("  用户名: testuser")
            print("  邮箱: test@example.com")
            print("  密码: testpass123")
        
        print("示例数据创建完成")
        return True
        
    except Exception as e:
        print(f"创建示例数据失败: {str(e)}")
        return False


def main():
    """
    主函数
    
    执行完整的数据库初始化流程。
    """
    print("=" * 50)
    print("LogWisdomHub 数据库初始化")
    print("=" * 50)
    
    # 步骤1: 创建数据库
    if not create_database():
        print("数据库创建失败，初始化终止")
        return False
    
    # 步骤2: 执行迁移
    if not run_migrations():
        print("数据库迁移失败，初始化终止")
        return False
    
    # 步骤3: 创建超级用户
    if not create_superuser():
        print("超级用户创建失败，但可以继续")
    
    # 步骤4: 创建示例数据
    if not create_sample_data():
        print("示例数据创建失败，但可以继续")
    
    print("\n" + "=" * 50)
    print("数据库初始化完成！")
    print("=" * 50)
    print("\n可以使用以下命令启动开发服务器:")
    print("  python manage.py runserver")
    print("\n管理后台地址: http://127.0.0.1:8000/admin/")
    print("API文档地址: http://127.0.0.1:8000/docs/")
    
    return True


if __name__ == '__main__':
    main()